Field
Example aspects described herein relate generally to a file transfer between a sender and a recipient connected via a network, and more particularly to recovery of lost or corrupt data packets during a file transfer between a sender and a recipient via a network.
Description of the Related Art
Generally speaking, in large multi-shelf systems such as telecommunication systems, or any distributed systems where file downloads are sent to various modules via broadcast or multicast, there is a probability of packet loss due to network link quality issues.
In such systems, software downloads, for example, can be multicasted via an unreliable User Datagram Protocol (UDP). For example, when using UDP, packets may be corrupted and therefore never delivered to their destination. Typically, at the end of a download, a checksum (CRC) for the entire file download is calculated. If the calculated checksum does not match the expected checksum, the file download must be repeated, doubling the download time. Repeating the download can dramatically delay an entire system download, for example, during software installation or upgrades, especially when there are many modules but only one file is broadcasted at a time. Repeating the download can also slow down software development efforts when performing tests of downloading new loads.
In one known approach, when a file transfer occurs over an unreliable protocol such as UDP, and the file is corrupted, the entire file is transmitted again. As noted above, retransmitting the entire file can double the download time.
Another known approach is to monitor for corrupted packets as they arrive at their destination, and then request that the corrupted packets be re-sent in real time from the server, such as in a Pretty Good Multicasting protocol. However, such a protocol can add significant complexity to an algorithm used in a file transfer, as the possibility of packets arriving out of order has to be accounted for, as well as missing packets being discarded by the operating system due to an invalid UDP checksum. This added complexity to the algorithm can burden a processor at the receiving side, such that the processor has less time to perform other tasks. This added complexity can also make software more difficult to maintain.
In yet another known approach, a file can be sent via unicast to each module individually, using a reliable file transfer such as TCP/IP instead of UDP/IP. However, using such an approach will typically increase the download time, since the file will have to be downloaded to each module individually, instead of broadcasting the file to all of the modules at the same time via broadcast or multicast.